/**
 * @file dvc_supercap.h
 * @author yssickjgd (yssickjgd@mail.ustc.edu.cn)
 * @brief 超级电容
 * @version 0.1
 * @date 2022-08-13
 *
 * @copyright USTC-RoboWalker (c) 2022
 *
 */

#ifndef DVC_SUPERCAP_H
#define DVC_SUPERCAP_H

/* Includes ------------------------------------------------------------------*/

#include "drv_can.h"

/* Exported macros -----------------------------------------------------------*/

/* Exported types ------------------------------------------------------------*/

class Class_Supercap
{
public:
    void Init(CAN_HandleTypeDef *__hcan, uint16_t __CAN_ID, float __Limit_Power_Max = 0);

    float Get_Stored_Energy();
    float Get_Output_Power();

    void Set_Limit_Power(float __Limit_Power);

    void CAN_RxCpltCallback(uint8_t *Rx_Data);

    void TIM_Send_PeriodElapsedCallback();

protected:
    //初始化相关常量

    //绑定的CAN总线
    CAN_HandleTypeDef *hcan;
    //收数据绑定的CAN ID, 切记避开0x201~0x20b, 默认收包CAN1的0x210, 滤波器最后一个, 发包CAN1的0x220
    uint16_t CAN_ID;
    //发送缓存区
    uint8_t *CAN_Tx_Data;
    //绝对最大限制功率, 0表示不限制
    float Limit_Power_Max = 0;

    //常量

    //内部变量

    //读变量

    //存储的能量
    float Stored_Energy = 0;
    //输出的功率
    float Output_Power = 0;

    //写变量

    //限制的功率
    float Limit_Power = 0;

    //读写变量

    //内部函数
};

/* Exported variables --------------------------------------------------------*/

/* Exported function declarations --------------------------------------------*/

#endif

/************************ COPYRIGHT(C) USTC-ROBOWALKER **************************/
